Group {
    children [
        Background {
            groundAngle [ 1.309, 1.571 ]
            groundColor [ 0.1 0.1 0, 0.4 0.25 0.2, 0.6 0.6 0.6 ]
            skyAngle [ 1.309, 1.571 ]
            skyColor [ 0 0.2 0.7, 0 0.5 1, 1 1 1 ]
        }

				Viewpoint { position 1.5 0 15 }

				Transform {
					rotation 0 1 0 0.6
					children [
						Shape {
								appearance Appearance {
										material Material {
												emissiveColor 0 1 0
										}
								}
								geometry DEF MG MeshGrid {
									nSlices [ 2 17 1 ]
									nLevels [ 1 3 1 ]
									displayLevel 2
									coord Coordinate { point [] }
									normal Normal { vector[] }
									gridCoord Coordinate {
										point [
											0.000000 -5.000000 0.000000,
											3.000000 -5.000000 0.000000,
											0.000000 -4.619778 1.912497,
											3.000000 -4.619778 1.912497,
											0.000000 -3.536941 3.534126,
											3.000000 -3.536941 3.534126,
											0.000000 -1.916176 4.618254,
											3.000000 -1.916176 4.618254,
											0.000000 -0.003982 4.999998,
											3.000000 -0.003982 4.999998,
											0.000000 1.908818 4.621300,
											3.000000 1.908818 4.621300,
											0.000000 3.531308 3.539755,
											3.000000 3.531308 3.539755,
											0.000000 4.616727 1.919853,
											3.000000 4.616727 1.919853,
											0.000000 4.999994 0.007963,
											3.000000 4.999994 0.007963,
											0.000000 4.622819 -1.905137,
											3.000000 4.622819 -1.905137,
											0.000000 3.542565 -3.528488,
											3.000000 3.542565 -3.528488,
											0.000000 1.923529 -4.615196,
											3.000000 1.923529 -4.615196,
											0.000000 0.011945 -4.999986,
											3.000000 0.011945 -4.999986,
											0.000000 -1.901455 -4.624334,
											3.000000 -1.901455 -4.624334,
											0.000000 -3.525666 -3.545374,
											3.000000 -3.525666 -3.545374,
											0.000000 -4.613663 -1.927203,
											3.000000 -4.613663 -1.927203,
											0.000000 -5.000000 0.000000,
											3.000000 -5.000000 0.000000,
										]
									}
		              vertexLink [
			              1, 2, 1, 1, 2
			              0 0 2 0 
			              0 0 0 1, 0 0 0 0, 0 0 0 0, 3 0 0 0
			              0 0
			              0 0
			              0 3
			              0 0
			              0 3
			              0 0
			              0 3
			              0 3
		              ]
		              vertexOffset [
			              0, 0
		              ]
								}
						 }
					]
			  }
        DEF OFFSET_ANIM Script {

          field SFNode mesh USE MG

          eventIn SFFloat set_anim
          eventOut MFFloat anim_changed

          field MFFloat offsets[]
          field SFInt32 index 0
          field SFInt32 count 0
    			field SFInt32 flag 0
          field SFFloat offsetAmplitude 3

          url "javascript:
            function set_anim(value)
            {
              // store the offsetAmplitude
              count = 0;
							if (flag == 0)
              {
                offsetAmplitude = 3;

                offsets[count++] = 1.0;  // has offsetAmplitude
                offsets[count++] = 0.0;  // positive offsetAmplitude
                while (offsetAmplitude > 1)
                {
                  offsets[count++] = 1.0;  // power 10
                  offsetAmplitude = offsetAmplitude / 10;
                }
                offsets[count++] = 0.0;
                offsets[count++] = offsetAmplitude;
              }
              else
                offsets[count++] = 0.0;  // use default offsetAmplitude

              // store the offset values
							if (flag == 0)
              {
							  for (index = count; index < 32 + count; index++)
							  {
								  offsets[index] = 0.4;
							  }
                flag = 1;
              }
              else
              {
							  for (index = count; index < 32 + count; index++)
							  {
								  offsets[index] = 0.6;
							  }
                flag = 0;
              }

							anim_changed = offsets;
						}
          "
        }

			DEF OFFSET_TIMER TimeSensor { cycleInterval 1.0 loop TRUE }
    ]
} 


ROUTE OFFSET_TIMER.fraction_changed TO OFFSET_ANIM.set_anim
ROUTE OFFSET_ANIM.anim_changed TO MG.vertexOffset

